import { myhttp } from '@/utils/request'
import { FilterValue, QueryConfig } from '@/common/dayu-common'

interface Project{
  id : number;
  /** 项目简称*/
  name? : string;
  /** 项目全称*/
  fullName? : string;
  /** 项目编码*/
  code? : string;
  /** 项目地点*/
  address? : string;
  /** 经度*/
  lng? : number;
  /** 纬度*/
  lat? : number;
  /** 项目类型*/
  projectKind? : string;
  projectKindCaption? : string;
  /** 销售经理*/
  salesManager? : number;
  /** 所在行政区*/
  districtCode? : string;
  districtCodeCaption? : string;
  /** 项目经理*/
  projectManager? : number;
  /** 立项日期*/
  initialDate? : string;
  /** 中标日期*/
  bidDate? : string;
  /** 合同金额*/
  contractAmount? : number;
  /** 项目周期*/
  projectMonths? : number;
  /** 项目建设内容*/
  projectContent? : string;
  /** 项目状态*/
  projectStatus? : string;
  projectStatusCaption? : string;
  /** 项目评分*/
  projectScore? : number;
  /** 业主单位*/
  projectOwner? : string;
  /** 联系人姓名*/
  linkMan? : string;
  /** 联系人电话*/
  linkPhone? : string;
  /** 是否中止*/
  abort? : boolean;
  /** 备注*/
  remarks? : string;
  /** 顺序号*/
  ordnum? : number;
  /** 锁定状态*/
  rowLock? : number;
}

interface ProjectStats{
  key?:string;
  aggregateGroupName?:string;
  aggregateGroupLabel?:string;
  /**项目类型*/
  projectKind?:string;
  /**所在行政区*/
  districtCode?:string;

    /**项目简称 记录条数*/
    nameRowsCount? : number;
    /**合同金额 合计*/
    contractAmountSum? : number;
    /**合同金额 平均值*/
    contractAmountAvg? : number;
    /**项目评分 合计*/
    projectScoreSum? : number;
    /**项目评分 平均值*/
    projectScoreAvg? : number;
}

/**对ProjectStats的二次封装，去掉了分组字段，只保留数值，并增加了部分行转列属性*/
class ProjectStatData{
  /**项目简称 记录条数*/
  nameRowsCount? : number;
  nameRowsCount1? :number;
  nameRowsCount2? : number;
  nameRowsCount3? : number;
  /**合同金额 合计*/
  contractAmountSum? : number;
  /**合同金额 平均值*/
  contractAmountAvg? : number;
  /**项目评分 合计*/
  projectScoreSum? : number;
  /**项目评分 平均值*/
  projectScoreAvg? : number;
}

class ProjectService{
  controller = 'project';
  
  /**获取一个Project对象*/
  getProject(id : number){
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/getProject`,{id: id});
  }
  
  /**获取一个EntityBO<Project>对象*/
  getProjectBO(id : number){
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/getProjectBO`,{id: id});
  }

  /**保存一个对象*/
  saveProject(item : Project) {
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/saveProject`,{item: JSON.stringify(item)});
  }

    /**更新单个字段的值
     *
     * @param id 记录id
     * @param propName 属性名称
     * @param value 属性值
    */
    updateProp(id:number, propName:string, value:any){
        return myhttp.post(`${myhttp.urlprix}base/${this.controller}/updateProp`,{id: id,propName:propName,value:value});
    }


  /**修改数据锁定状态
   * @param id 记录id，另-1表示对整表进行锁定
   * @param lockState
   * @param authTag 权限类型，参考 AuthTag
  **/
  changeLockState(id:number, lockState:number){
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/changeLockState`,{id: id, lockState:lockState});
  }
  /**修改整表被锁定的状态
     
   * @param id 记录id，另-1表示对整表进行锁定
   * @param lockState
   * @param authTag 权限类型，参考 AuthTag
  **/
  changeMasterLockState(lockState:number){
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/changeMasterLockState`,{lockState:lockState});
  }

  /**删除一条记录*/
  deleteProject(id : number){
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/deleteProject`,{id : id});
  }

  /**根据条件查询*/
  getProjectExListAndStats(filters:Array<FilterValue>, queryConfig:QueryConfig) {
    return myhttp.post(`${myhttp.urlprix}base/${this.controller}/getProjectExListAndStats`,{filters: JSON.stringify(filters), queryConfig: JSON.stringify(queryConfig)});
  }

  /**导出并下载excel文件*/
  exportProjectExListAndStats(filters:Array<FilterValue>, queryConfig:QueryConfig) {
    return myhttp.post(`${myhttp.urlprix}xls/${this.controller}/getProjectExListAndStats`,{filters: JSON.stringify(filters), queryConfig: JSON.stringify(queryConfig)});
  }
}

const projectService = new ProjectService();

export {Project, ProjectStats, ProjectStatData, projectService}